package com.qf.index.gcrdo.httpclient;


import org.apache.commons.lang.StringUtils;

import java.net.MalformedURLException;
import java.net.URL;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * @Author: gcr
 * @Date: 2022-1-4 13:40
 */
public class StrUtils {

    private static Set<String> noneDefaultSet = new HashSet<>();
    private static Map<String, String> noneDefaultMap = new HashMap<>();
    private static String REGEX_CHINESE = "[\u4e00-\u9fa5]";// 中文正则

    static {
        noneDefaultSet = getStandardCharacterSet(false);
        noneDefaultMap = getCharacterAndStandardMap(false);
    }

    public static String removeBackSlash(String str) {
        return str.replaceAll("\\\\", "");
    }

    //删除文字里面的中文
    public static String delChinaStr(String s) {

        Pattern pat = Pattern.compile(REGEX_CHINESE);

        Matcher mat = pat.matcher(s);

        String string = mat.replaceAll("");
        return string;
    }

    public static String getUrlEndWith(String url) {
        String[] split = url.split("/.");
        String end = split[split.length - 1].toLowerCase();
        return end;
    }


    // 因为斯坦福会对标点符号前后加上空格，因此，需要作一定的处理。比如：ganoderma lucidum ( leyss . ex fr . ) karst -> ganoderma lucidum (leyss.ex fr) karst

    // reKw 方法是，只保留中文、字母和'、-、;、,、.、(、)、"、·、一、二、三、四、五、六、七、八、九、十、/、:、\以及空格和所有的数字，共33个。

    // 规范的、常用的字符串集合，保留了中文下的书名号和顿号。默认情况下，包含序号以及一些在作者和期刊中，不经常出现的图形符号等。
    public static Set<String> getStandardCharacterSet(boolean isDefault) {
        Set<String> set = new HashSet<>();

        set.add(" ");
        set.add(".");
        set.add("'");
        set.add(",");
        set.add(";");
        set.add("-");
        set.add("(");
        set.add(")");
        set.add("\"");
        set.add("/");
        set.add("/");
        set.add(":");

        set.add("0");
        set.add("1");
        set.add("2");
        set.add("3");
        set.add("4");
        set.add("5");
        set.add("6");
        set.add("7");
        set.add("8");
        set.add("9");

        set.add("一");
        set.add("二");
        set.add("三");
        set.add("四");
        set.add("五");
        set.add("六");
        set.add("七");
        set.add("八");
        set.add("九");
        set.add("十");

        set.add("a");
        set.add("b");
        set.add("c");
        set.add("d");
        set.add("e");
        set.add("f");
        set.add("g");
        set.add("h");
        set.add("i");
        set.add("j");
        set.add("k");
        set.add("l");
        set.add("m");
        set.add("n");
        set.add("o");
        set.add("p");
        set.add("q");
        set.add("r");
        set.add("s");
        set.add("t");
        set.add("u");
        set.add("v");
        set.add("w");
        set.add("x");
        set.add("y");
        set.add("z");

        if (isDefault) {
            set.add("の");
            set.add("∂");
            set.add("ب");
            set.add("ة");
            set.add("ت");
            set.add("∫");
            set.add("ج");
            set.add("ر");
            set.add("س");
            set.add("ع");
            set.add("د");
            set.add("ف");
            set.add("ل");
            set.add("م");
            set.add("ن");
            set.add("ч");
            set.add("و");
            set.add("щ");
            set.add("ي");
            set.add("ы");
            set.add("ю");
            set.add("я");
            set.add("ə");
            set.add("¢");
            set.add("£");
            set.add("€");
            set.add("ø");
            set.add("ӕ");
            set.add("æ");
            set.add("ð");
            set.add("￠");
            set.add("￡");

            set.add("ϵ");
            set.add("△");
            set.add("▲");
            set.add("◎");
            set.add("☆");
            set.add("★");
            set.add("◇");
            set.add("◆");
            set.add("□");
            set.add("■");
            set.add("▽");
            set.add("▼");
            set.add("지");
            set.add("←");
            set.add("↑");
            set.add("→");
            set.add("↓");
            set.add("þ");
            set.add("⊥");
            set.add("©");
            set.add("⊂");
            set.add("⊕");
            set.add("⊙");
            set.add("≫");
            set.add("≪");
            set.add("≡");
            set.add("≠");
            set.add("≌");
            set.add("≈");
            set.add("※");
            set.add("∷");
            set.add("∪");
            set.add("∩");
            set.add("∨");
            set.add("∠");
            set.add("≯");
            set.add("∝");
            set.add("∞");
            set.add("∓");
            set.add("∆");
            set.add("∈");
            set.add("√");
            set.add("∮");
            set.add("①");
            set.add("②");
            set.add("③");
            set.add("④");
            set.add("⑤");
            set.add("⑥");
            set.add("⑦");
            set.add("⑧");
            set.add("⑨");
            set.add("⑩");
            set.add("⑪");
            set.add("⑫");

            set.add("･");
            set.add("、");
            set.add("《");
            set.add("》");
            set.add("(");
            set.add(")");
            set.add("[");
            set.add("]");
            set.add("{");
            set.add("}");
            set.add("∘");
            set.add("°");
            set.add("●");
            set.add("!");
            set.add("\"");
            set.add("|");
            set.add("/");
            set.add("_");
            set.add("-");
            set.add("⁻");
            set.add("ˉ");
            set.add("+");
            set.add("#");
            set.add("$");
            set.add("%");
            set.add("∥");
            set.add("…");
            set.add("⋯");
            set.add("`");
            set.add(":");
            set.add("?");
            set.add("@");
            set.add("~");
            set.add("‰");
            set.add("±");
            set.add("=");
            set.add("≥");
            set.add("≤");
            set.add("<");
            set.add(">");
            set.add("/");
            set.add("￥");
            set.add("*");
            set.add("®");
            set.add("℃");
            set.add("℉");
            set.add("№");
            set.add("™");
            set.add("㎡");
            set.add("^");
            set.add("§");
            set.add("÷");
            set.add("¼");
            set.add("½");
            set.add("｢");
            set.add("｣");
        }
        return set;
    }

    // 普通的字符串相对应的标准字符串的关系MAP
    public static Map<String, String> getCharacterAndStandardMap(boolean isDefault) {
        Map<String, String> map = new HashMap<>();
        map.put("‘", "'");
        map.put("’", "'");
        map.put("‛", "'");
        map.put("′", "'");
        map.put("̀|", "'");
        map.put("׳", "'");
        map.put("̇|", "'");
        map.put("ʼ", "'");
        map.put("ʾ", "'");
        map.put("ʿ", "'");
        map.put("ˈ", "'");
        map.put("ˊ", "'");
        map.put("ˋ", "'");
        map.put("˙", "'");
        map.put("ۥ", "'");
        map.put("＇", "'");
        map.put("̍", "'");
        map.put("̔", "'");
        map.put("｀", "'");
        map.put("΄", "'");
        map.put("ꞌ", "'");
        map.put("᾽", "'");
        map.put("´", "");
        map.put("́", "'");

        map.put("‐", "-");
        map.put("‑", "-");
        map.put("‒", "-");
        map.put("–", "-");
        map.put("—", "-");
        map.put("―", "-");
        map.put("⁃", "-");
        map.put("­", "-");
        map.put("ー", "-");
        map.put("─", "-");
        map.put("━", "-");
        map.put("−", "-");
        map.put("̅", "-");
        map.put("－", "-");
        map.put("̵", "-");
        map.put("̶", "-");
        map.put("﹣", "-");
        map.put("̄", "-");
        map.put("₋", "-");
        map.put("￣", "-");
        map.put("＿", "-");

//        map.put("一", "1");
//        map.put("二", "2");
//        map.put("三", "3");
//        map.put("四", "4");
//        map.put("五", "5");
//        map.put("六", "6");
//        map.put("七", "7");
//        map.put("八", "8");
//        map.put("九", "9");
//        map.put("十", "10");

        map.put("﹔", ";");
        map.put("；", ";");
        map.put(";", ";");

        //下9形单引号
        map.put("‚", "'");
        map.put("،", ",");
        map.put("﹐", ",");
        map.put("٫", ",");
        map.put("，", ",");
        map.put("、", ",");

        map.put("﹒", "·");
        map.put("．", ".");
        map.put("｡", ".");
        map.put("‧", "·");
        map.put("⋅", "·");
        map.put("。", ".");
        map.put(".", ".");
        map.put("•", "·");
        map.put("∙", "·");
        map.put("·", "·");
        map.put("⬢", "·");
        map.put("ㆍ", "·");
        map.put("▪", "·");
        map.put("・", "·");

        map.put("＆", " and ");
        map.put("﹠", " and ");
        map.put("&", " and ");

        map.put("ж", "zh");
        map.put("œ", "oe");
        map.put("ﬀ", "ff");
        map.put("ﬂ", "fi");
        map.put("ﬁ", "fi");
        map.put("ﬃ", "ffi");
        map.put("ﬄ", "ffl");
        map.put("ĳ", "ij");

        map.put("а", "a");
        map.put("ª", "a");
        map.put("ӑ", "a");
        map.put("ӓ", "a");
        map.put("à", "a");
        map.put("á", "a");
        map.put("â", "a");
        map.put("ã", "a");
        map.put("ä", "a");
        map.put("å", "a");
        map.put("ā", "a");
        map.put("ă", "a");
        map.put("ą", "a");
        map.put("ᵃ", "a");
        map.put("ᶏ", "a");
        map.put("ǎ", "a");
        map.put("ǣ", "a");
        map.put("ǻ", "a");
        map.put("ȁ", "a");
        map.put("ȃ", "a");
        map.put("ȧ", "a");
        map.put("ɑ", "a");
        map.put("ẚ", "a");
        map.put("ạ", "a");
        map.put("ả", "a");
        map.put("ấ", "a");
        map.put("ầ", "a");
        map.put("ẩ", "a");
        map.put("ẫ", "a");
        map.put("ậ", "a");
        map.put("ắ", "a");
        map.put("ằ", "a");
        map.put("ẳ", "a");
        map.put("ẵ", "a");
        map.put("ặ", "a");
        map.put("ἀ", "a");
        map.put("ἁ", "a");
        map.put("ἄ", "a");
        map.put("ａ", "a");
        map.put("ὰ", "a");
        map.put("ά", "a");
        map.put("ᾰ", "a");
        map.put("ᾱ", "a");
        map.put("ᾳ", "a");
        map.put("ᾶ", "a");
        map.put("б", "b");
        map.put("ъ", "b");
        map.put("ь", "b");
        map.put("ط", "b");
        map.put("ｂ", "b");
        map.put("ϐ", "b");
        map.put("ϸ", "b");
        map.put("ц", "c");
        map.put("ҫ", "c");
        map.put("ç", "c");
        map.put("ć", "c");
        map.put("ĉ", "c");
        map.put("ċ", "c");
        map.put("č", "c");
        map.put("ᶜ", "c");
        map.put("ḉ", "c");
        map.put("ｃ", "c");
        map.put("ↅ", "c");
        map.put("д", "d");
        map.put("ď", "d");
        map.put("đ", "d");
        map.put("ḋ", "d");
        map.put("ḍ", "d");
        map.put("ḏ", "d");
        map.put("ḓ", "d");
        map.put("ȡ", "d");
        map.put("ɖ", "d");
        map.put("ʤ", "d");
        map.put("ｄ", "d");
        map.put("е", "e");
        map.put("э", "e");
        map.put("ѐ", "e");
        map.put("ё", "e");
        map.put("є", "e");
        map.put("ӗ", "e");
        map.put("è", "e");
        map.put("é", "e");
        map.put("ê", "e");
        map.put("ë", "e");
        map.put("ē", "e");
        map.put("ĕ", "e");
        map.put("ė", "e");
        map.put("ę", "e");
        map.put("ě", "e");
        map.put("ȅ", "e");
        map.put("ȇ", "e");
        map.put("ḗ", "e");
        map.put("ḝ", "e");
        map.put("ȩ", "e");
        map.put("ɐ", "e");
        map.put("ɛ", "e");
        map.put("ẹ", "e");
        map.put("ẻ", "e");
        map.put("ẽ", "e");
        map.put("ế", "e");
        map.put("ề", "e");
        map.put("ể", "e");
        map.put("ễ", "e");
        map.put("ệ", "e");
        map.put("ἐ", "e");
        map.put("ἓ", "e");
        map.put("ἕ", "e");
        map.put("ｅ", "e");
        map.put("ὲ", "e");
        map.put("έ", "e");
        map.put("ф", "f");
        map.put("ƒ", "f");
        map.put("ｆ", "f");
        map.put("ϕ", "f");
        map.put("г", "g");
        map.put("ѓ", "g");
        map.put("ĝ", "g");
        map.put("ğ", "g");
        map.put("ġ", "g");
        map.put("ģ", "g");
        map.put("ǧ", "g");
        map.put("ǵ", "g");
        map.put("ḡ", "g");
        map.put("ɡ", "g");
        map.put("ɣ", "g");
        map.put("ｇ", "g");
        map.put("х", "h");
        map.put("ћ", "h");
        map.put("ℎ", "h");
        map.put("ℏ", "h");
        map.put("ĥ", "h");
        map.put("ħ", "h");
        map.put("ḣ", "h");
        map.put("ḥ", "h");
        map.put("ḧ", "h");
        map.put("ḩ", "h");
        map.put("ḫ", "h");
        map.put("ẖ", "h");
        map.put("ἠ", "h");
        map.put("ἢ", "h");
        map.put("ｈ", "h");
        map.put("ὴ", "h");
        map.put("ή", "h");
        map.put("ￃ", "h");
        map.put("ῃ", "h");
        map.put("ῆ", "h");
        map.put("и", "i");
        map.put("й", "i");
        map.put("і", "i");
        map.put("ї", "i");
        map.put("ѵ", "i");
        map.put("ѷ", "i");
        map.put("ì", "i");
        map.put("í", "i");
        map.put("î", "i");
        map.put("ï", "i");
        map.put("ĩ", "i");
        map.put("ī", "i");
        map.put("ĭ", "i");
        map.put("į", "i");
        map.put("ı", "i");
        map.put("ǐ", "i");
        map.put("ȉ", "i");
        map.put("ȋ", "i");
        map.put("إ", "i");
        map.put("ḭ", "i");
        map.put("ɨ", "i");
        map.put("ɪ", "i");
        map.put("ỉ", "i");
        map.put("ị", "i");
        map.put("༑", "i");
        map.put("ἰ", "i");
        map.put("ἶ", "i");
        map.put("ｉ", "i");
        map.put("ΐ", "i");
        map.put("ί", "i");
        map.put("ϊ", "i");
        map.put("ῖ", "i");
        map.put("¡", "!");
        map.put("أ", "i");
        map.put("ј", "j");
        map.put("ĵ", "j");
        map.put("ǰ", "j");
        map.put("ﺰ", "j");
        map.put("ʲ", "j");
        map.put("ｊ", "j");
        map.put("ҟ", "k");
        map.put("ⓚ", "k");
        map.put("ķ", "k");
        map.put("ḱ", "k");
        map.put("ḳ", "k");
        map.put("ḵ", "k");
        map.put("ｋ", "k");
        map.put("ϰ", "k");
        map.put("ĸ", "k");
        map.put("к", "k");
        map.put("ќ", "k");
        map.put("л", "l");
        map.put("し", "l");
        map.put("ℓ", "l");
        map.put("ĺ", "l");
        map.put("ļ", "l");
        map.put("ľ", "l");
        map.put("ŀ", "l");
        map.put("ł", "l");
        map.put("ւ", "l");
        map.put("ƚ", "l");
        map.put("ȴ", "l");
        map.put("ḷ", "l");
        map.put("ḻ", "l");
        map.put("ḽ", "l");
        map.put("ɩ", "l");
        map.put("ɬ", "l");
        map.put("ｌ", "l");
        map.put("ᴌ", "l");
        map.put("м", "m");
        map.put("ḿ", "m");
        map.put("ṁ", "m");
        map.put("ṃ", "m");
        map.put("ｍ", "m");
        map.put("н", "n");
        map.put("ñ", "n");
        map.put("ℕ", "n");
        map.put("ń", "n");
        map.put("ņ", "n");
        map.put("ň", "n");
        map.put("ŉ", "n");
        map.put("ƞ", "n");
        map.put("ǹ", "n");
        map.put("ṅ", "n");
        map.put("ṇ", "n");
        map.put("ṉ", "n");
        map.put("ṋ", "n");
        map.put("ｎ", "n");
        map.put("", "n");
        map.put("〇", "o");
        map.put("о", "o");
        map.put("ӧ", "o");
        map.put("ò", "o");
        map.put("ó", "o");
        map.put("ô", "o");
        map.put("õ", "o");
        map.put("ö", "o");
        map.put("ं", "o");
        map.put("्", "o");
        map.put("ō", "o");
        map.put("ŏ", "o");
        map.put("ő", "o");
        map.put("ơ", "o");
        map.put("○", "o");
        map.put("ǒ", "o");
        map.put("ǫ", "o");
        map.put("ǿ", "o");
        map.put("ȍ", "o");
        map.put("ȏ", "o");
        map.put("ȫ", "o");
        map.put("ȯ", "o");
        map.put("ٍ", "o");
        map.put("ṍ", "o");
        map.put("َ", "o");
        map.put("ُ", "o");
        map.put("ِ", "o");
        map.put("ّ", "o");
        map.put("ɒ", "o");
        map.put("ɵ", "o");
        map.put("ọ", "o");
        map.put("ø", "o"); // 2022.07.27增加
        map.put("ỏ", "o");
        map.put("ố", "o");
        map.put("ồ", "o");
        map.put("ổ", "o");
        map.put("ỗ", "o");
        map.put("ộ", "o");
        map.put("ớ", "o");
        map.put("ờ", "o");
        map.put("ở", "o");
        map.put("ợ", "o");
        map.put("０", "0");
        map.put("⬡", "o");
        map.put("ὀ", "o");
        map.put("ὁ", "o");
        map.put("ὂ", "o");
        map.put("ὃ", "o");
        map.put("ὄ", "o");
        map.put("ὅ", "o");
        map.put("ｏ", "o");
        map.put("ὸ", "o");
        map.put("ό", "o");
        map.put("ᴓ", "o");
        map.put("ℴ", "o");
        map.put("п", "p");
        map.put("ṕ", "p");
        map.put("ṗ", "p");
        map.put("ｐ", "p");
        map.put("ϖ", "p");
        map.put("љ", "q");
        map.put("ｑ", "q");
        map.put("ϑ", "q");
        map.put("р", "r");
        map.put("ⓡ", "r");
        map.put("ŕ", "r");
        map.put("ŗ", "r");
        map.put("ř", "r");
        map.put("ȓ", "r");
        map.put("ṙ", "r");
        map.put("ṛ", "r");
        map.put("ṝ", "r");
        map.put("ｒ", "r");
        map.put("ϱ", "r");
        map.put("ῥ", "r");
        map.put("с", "s");
        map.put("ś", "s");
        map.put("ŝ", "s");
        map.put("ş", "s");
        map.put("š", "s");
        map.put("ſ", "s");
        map.put("ș", "s");
        map.put("ṡ", "s");
        map.put("ṣ", "s");
        map.put("ṧ", "s");
        map.put("ʂ", "s");
        map.put("ｓ", "s");
        map.put("ς", "s");
        map.put("ϲ", "s");
        map.put("т", "t");
        map.put("ţ", "t");
        map.put("ť", "t");
        map.put("ƫ", "t");
        map.put("ț", "t");
        map.put("ṫ", "t");
        map.put("ṭ", "t");
        map.put("ṯ", "t");
        map.put("ẗ", "t");
        map.put("ｔ", "t");
        map.put("у", "u");
        map.put("ù", "u");
        map.put("ú", "u");
        map.put("û", "u");
        map.put("ü", "u");
        map.put("ũ", "u");
        map.put("ū", "u");
        map.put("ŭ", "u");
        map.put("ů", "u");
        map.put("ű", "u");
        map.put("ų", "u");
        map.put("ư", "u");
        map.put("ǔ", "u");
        map.put("ǖ", "u");
        map.put("ǘ", "u");
        map.put("ǚ", "u");
        map.put("ǜ", "u");
        map.put("ȕ", "u");
        map.put("ȗ", "u");
        map.put("ṻ", "u");
        map.put("ʉ", "u");
        map.put("ủ", "u");
        map.put("ứ", "u");
        map.put("ừ", "u");
        map.put("ữ", "u");
        map.put("ự", "u");
        map.put("ὐ", "u");
        map.put("ὓ", "u");
        map.put("ｕ", "u");
        map.put("ΰ", "u");
        map.put("ϋ", "u");
        map.put("ύ", "u");
        map.put("ῦ", "u");
        map.put("в", "v");
        map.put("ｖ", "v");
        map.put("њ", "w");
        map.put("ŵ", "w");
        map.put("ẁ", "w");
        map.put("ẃ", "w");
        map.put("ẅ", "w");
        map.put("ẇ", "w");
        map.put("ʷ", "w");
        map.put("ｗ", "w");
        map.put("ὠ", "w");
        map.put("ώ", "w");
        map.put("ῲ", "w");
        map.put("ῳ", "w");
        map.put("ῶ", "w");
        map.put("ӿ", "x");
        map.put("ｘ", "x");
        map.put("×", "×");
        map.put("ѕ", "y");
        map.put("ӯ", "у");
        map.put("ý", "y");
        map.put("ÿ", "y");
        map.put("ŷ", "y");
        map.put("ȳ", "y");
        map.put("ẏ", "y");
        map.put("ẙ", "y");
        map.put("ỳ", "y");
        map.put("ỷ", "y");
        map.put("ỹ", "y");
        map.put("ｙ", "y");
        map.put("з", "z");
        map.put("ź", "z");
        map.put("ż", "z");
        map.put("ž", "z");
        map.put("ƶ", "z");
        map.put("ȥ", "z");
        map.put("ẑ", "z");
        map.put("ẓ", "z");
        map.put("ｚ", "z");

        map.put("ⅰ", "1");
        map.put("ⅱ", "2");
        map.put("ⅲ", "3");
        map.put("ⅳ", "4");
        map.put("ⅴ", "5");
        map.put("ⅵ", "6");
        map.put("ⅶ", "7");
        map.put("ⅷ", "8");
        map.put("ⅸ", "9");
        map.put("ⅹ", "10");
        map.put("ⅺ", "11");
        map.put("ⅻ", "12");

        map.put("㈣", "4");
        map.put("⑴", "1");
        map.put("⑵", "2");
        map.put("⑶", "3");
        map.put("⑷", "4");
        map.put("⑸", "5");
        map.put("⑹", "6");
        map.put("⑺", "7");
        map.put("⑻", "8");
        map.put("⑼", "9");
        map.put("⑽", "10");
        map.put("⑾", "11");
        map.put("⑿", "12");

        map.put("＂", "\"");
        map.put("ˮ", "\"");
        map.put("﹙", "(");
        map.put("（", "(");
        map.put("﹚", ")");
        map.put("）", ")");
        map.put("¨", "\"");
        map.put("“", "\"");
        map.put("”", "\"");
        map.put("„", "\"");
        map.put("‟", "\"");
        map.put("″", "\"");
        map.put("〝", "\"");
        map.put("〞", "\"");
        map.put("〟", "\"");
        map.put("〃", "\"");
        map.put("˝", "\"");

        map.put("⁄", "/");
        map.put("╱", "/");
        map.put("⧸", "/");
        map.put("∕", "/");
        map.put("／", "/");
        map.put("̸", "/");
        map.put("：", ":");
        map.put("︰", ":");
        map.put("﹕", ":");

        // 下面的这一批，如果是在处理作者和期刊时，发现还存在，故全部给替换成空格。
        map.put("　", " ");
        map.put("∂", " ");
        map.put("★", " ");
        map.put("☆", " ");
        map.put("∆", " ");
        map.put("〈", " ");
        map.put("∈", " ");
        map.put("〉", " ");
        map.put("《", " ");
        map.put("》", " ");
        map.put("「", " ");
        map.put("」", " ");
        map.put("『", " ");
        map.put("∏", " ");
        map.put("』", " ");
        map.put(UrlEntity.FILE_START, " ");
        map.put("∑", " ");
        map.put(UrlEntity.FILE_END, " ");
        map.put("∓", " ");
        map.put("〓", " ");
        map.put("〔", " ");
        map.put("〕", " ");
        map.put("〖", " ");
        map.put("∖", " ");
        map.put("‖", " ");
        map.put("〗", " ");
        map.put("∗", " ");
        map.put("∘", ".");
        map.put("√", " ");
        map.put("〛", " ");
        map.put("〜", " ");
        map.put("∝", " ");
        map.put("∞", " ");
        map.put("∠", " ");
        map.put("〡", " ");
        map.put("〢", " ");
        map.put("〣", " ");
        map.put("∣", " ");
        map.put("〤", " ");
        map.put("∥", " ");
        map.put("〥", " ");
        map.put("…", " ");
        map.put("∧", " ");
        map.put("〧", " ");
        map.put("∨", " ");
        map.put("〨", " ");
        map.put("∩", " ");
        map.put("∪", " ");
        map.put("∫", " ");
        map.put("∮", " ");
        map.put("‰", " ");
        map.put("∶", " ");
        map.put("∷", " ");
        map.put("‹", " ");
        map.put("›", " ");
        map.put("※", " ");
        map.put("∼", " ");
        map.put("∽", " ");
        map.put("≃", " ");
        map.put("≅", " ");
        map.put("≈", " ");
        map.put("⑊", " ");
        map.put("≌", " ");
        map.put("⁎", " ");
        map.put("①", " ");
        map.put("≠", " ");
        map.put("②", " ");
        map.put("≡", " ");
        map.put("③", " ");
        map.put("④", " ");
        map.put("⑤", " ");
        map.put("≤", " ");
        map.put("⑥", " ");
        map.put("≥", " ");
        map.put("⑦", " ");
        map.put("≦", " ");
        map.put("⑧", " ");
        map.put("≧", " ");
        map.put("⑨", " ");
        map.put("⑩", " ");
        map.put("≪", " ");
        map.put("⑪", " ");
        map.put("≫", " ");
        map.put("⑫", " ");
        map.put("♯", " ");
        map.put("≯", " ");
        map.put("≲", " ");
        map.put("≳", " ");
        map.put("⁴", " ");
        map.put("⁵", " ");
        map.put("⁶", " ");
        map.put("⁷", " ");
        map.put("⁸", " ");
        map.put("⁹", " ");
        map.put("⁺", " ");
        map.put("⁻", " ");
        map.put("⩽", " ");
        map.put("⩾", " ");
        map.put("₀", " ");
        map.put("₁", " ");
        map.put("⊂", " ");
        map.put("₂", " ");
        map.put("₃", " ");
        map.put("₄", " ");
        map.put("₅", " ");
        map.put("₆", " ");
        map.put("₇", " ");
        map.put("⒈", " ");
        map.put("₈", " ");
        map.put("⒉", " ");
        map.put("₉", " ");
        map.put("⒊", " ");
        map.put("⊕", " ");
        map.put("⒕", " ");
        map.put("⊙", " ");
        map.put("⒙", " ");
        map.put("⊚", " ");
        map.put("⊥", " ");
        map.put("€", " ");
        map.put("キ", " ");
        map.put("ニ", " ");
        map.put("⋜", " ");
        map.put("⋯", " ");
        map.put("│", " ");
        map.put("℃", " ");
        map.put("┃", " ");
        map.put("℅", " ");
        map.put("┆", " ");
        map.put("℉", " ");
        map.put("✓", " ");
        map.put("№", " ");
        map.put("™", " ");
        map.put("〈", " ");
        map.put("〉", " ");
        map.put("✶", " ");
        map.put("═", " ");
        map.put("║", " ");
        map.put("⭠", " ");
        map.put("╪", " ");
        map.put("⦀", " ");
        map.put("㎏", " ");
        map.put("←", " ");
        map.put("↑", " ");
        map.put("→", " ");
        map.put("↓", " ");
        map.put("⎜", " ");
        map.put("㎝", " ");
        map.put("■", " ");
        map.put("□", " ");
        map.put("㎡", " ");
        map.put("▲", " ");
        map.put("△", " ");
        map.put("▼", " ");
        map.put("▽", " ");
        map.put("지", " ");
        map.put("◆", " ");
        map.put("◇", " ");
        map.put("◎", " ");
        map.put("●", " ");
        map.put("⇑", " ");
        map.put("⧧", " ");
        map.put("⟨", " ");
        map.put("⟩", " ");
        map.put("⧹", " ");

        map.put("α", " alpha ");
        map.put("β", " beta ");
        map.put("γ", " gamma ");
        map.put("δ", " delta ");
        map.put("ε", " epsilon ");
        map.put("ζ", " zeta ");
        map.put("η", " eta ");
        map.put("θ", " theta ");
        map.put("ι", " iota ");
        map.put("κ", " kappa ");
        map.put("λ", " lambda ");
        map.put("μ", " mu ");
        map.put("ν", " nu ");
        map.put("ξ", " xi ");
        map.put("ο", " omicron ");
        map.put("π", " pi ");
        map.put("ρ", " rho ");
        map.put("σ", " sigma ");
        map.put("τ", " tau ");
        map.put("υ", " upsilon ");
        map.put("φ", " phi ");
        map.put("χ", " chi ");
        map.put("ψ", " psi ");
        map.put("ω", " omega ");

        if (isDefault) {

            // 上面也有这些连接符和点，但上面的全部替换成了唯一的连接符和唯一的点，下面的这些替换的不是唯一的，是多种的连接符和多种的点。
            map.put("‐", "-");
            map.put("‑", "-");
            map.put("‒", "-");
            map.put("–", "-");
            map.put("—", "-");
            map.put("―", "-");
            map.put("⁃", "-");
            map.put("­", "-");
            map.put("ー", "-");
            map.put("─", "-");
            map.put("━", "-");
            map.put("−", "-");
            map.put("̅", "-");
            map.put("－", "-");
            map.put("̵", "-");
            map.put("̶", "-");
            map.put("﹣", "-");
            map.put("̄", "-");
            map.put("₋", "-");
            map.put("￣", "-");
            map.put("＿", "-");
            map.put("﹒", ".");
            map.put("．", ".");
            map.put("｡", ".");
            map.put("‧", "·");
            map.put("⋅", ".");
            map.put("。", ".");
            map.put(".", "･");
            map.put("·", "･");
            map.put("•", "･");
            map.put("∙", "･");
            map.put("·", "·");
            map.put("⬢", "·");
            map.put("ㆍ", "·");
            map.put("▪", "·");
            map.put("・", "·");

            map.put("⧧", "≠");
            map.put("？", "?");
            map.put("〃", "\"");
            map.put("〈", "<");
            map.put("	", " ");
            map.put("「", "｢");
            map.put("」", "｣");
            map.put("『", "｢");
            map.put("』", "｣");
            map.put("〓", "=");
            map.put("〔", "[");
            map.put("〕", "]");
            map.put("〖", "[");
            map.put("〗", "]");
            map.put("〛", "]");
            map.put("“", "\"");
            map.put("〜", "~");
            map.put("”", "\"");
            map.put("〝", "\"");
            map.put("〞", "\"");
            map.put("„", "\"");
            map.put("‟", "\"");
            map.put("〟", "\"");
            map.put("〡", "1");
            map.put("〢", "2");
            map.put("〣", "3");
            map.put("〤", "4");
            map.put("〥", "5");
            map.put("〧", "7");
            map.put("〨", "8");
            map.put("›", ">");
            map.put("⁄", "/");
            map.put("ш", "{");
            map.put("⑊", "/");
            map.put("⁎", "*");
            map.put("⑴", "①");
            map.put("⁴", "4");
            map.put("⁵", "5");
            map.put("⁶", "6");
            map.put("⑷", "④");
            map.put("⁷", "7");
            map.put("⑸", "⑤");
            map.put("⁸", "8");
            map.put("⑹", "⑥");
            map.put("⁹", "9");
            map.put("⁺", "+");
            map.put("⑺", "⑦");
            map.put("⑻", "⑧");
            map.put("⑼", "⑨");
            map.put("⑽", "⑩");
            map.put("⑾", "⑪");
            map.put("⑿", "⑫");
            map.put("₀", " ");
            map.put("₁", "①");
            map.put("₂", "②");
            map.put("₃", "3");
            map.put("₄", "④");
            map.put("₅", "⑤");
            map.put("₆", "⑥");
            map.put("₇", "⑦");
            map.put("⒈", "1.");
            map.put("₈", "⑧");
            map.put("⒉", "2.");
            map.put("₉", "⑨");
            map.put("⒊", "3.");
            map.put("⒕", "14.");
            map.put("⒙", "18.");
            map.put("¦", "|");
            map.put("¨", "\"");
            map.put("キ", "≠");
            map.put("¯", "ˉ");
            map.put("²", "2");
            map.put("³", "3");
            map.put("µ", " mu ");
            map.put("¹", "1");
            map.put("º", "°");
            map.put("ニ", "=");
            map.put("ß", " beta ");
            map.put("│", "|");
            map.put("┃", "|");
            map.put("┆", "|");
            map.put("═", "-");
            map.put("╪", "≠");
            map.put("╱", "/");
            map.put("⦀", "∥");
            map.put("ǀ", "|");
            map.put("ǁ", "∥");
            map.put("⇑", "↑");
            map.put("̃|", "\"");
            map.put("⧸", "/");
            map.put("⧹", "/");
            map.put("∕", "/");
            map.put("∖", "/");
            map.put("∗", "*");
            map.put("㈣", "④");
            map.put("︰", ":");
            map.put("︱", "|");
            map.put("﹁", "｢");
            map.put("﹂", "｣");
            map.put("﹃", "｢");
            map.put("≃", "≃");
            map.put("﹄", "｣");
            map.put("≅", "≅");
            map.put("﹕", ":");
            map.put("﹙", "(");
            map.put("﹚", ")");
            map.put("﹝", "[");
            map.put("﹞", "]");
            map.put("﹟", "#");
            map.put("﹡", "*");
            map.put("﹢", "+");
            map.put("﹤", "<");
            map.put("﹥", ">");
            map.put("﹦", "=");
            map.put("≦", "≤");
            map.put("≧", "≥");
            map.put("﹪", "%");
            map.put("♯", "#");
            map.put("≲", "≤");
            map.put("≳", "≥");
            map.put("⩽", "≤");
            map.put("⩾", "≥");
            map.put("⊚", "⊙");
            map.put("˜", "~");
            map.put("⋜", "≤");
            map.put("˝", "\"");
            map.put("ˮ", "\"");
            map.put("！", "!");
            map.put("＂", "\"");
            map.put("＃", "#");
            map.put("＄", "$");
            map.put("％", "%");
            map.put("（", "(");
            map.put("）", ")");
            map.put("＊", "*");
            map.put("＋", "+");
            map.put("／", "/");
            map.put("✓", "√");
            map.put("１", "1");
            map.put("２", "2");
            map.put("３", "3");
            map.put("４", "4");
            map.put("５", "5");
            map.put("６", "6");
            map.put("７", "7");
            map.put("８", "8");
            map.put("９", "9");
            map.put("：", ":");
            map.put("＜", "<");
            map.put("＝", "=");
            map.put("＞", ">");
            map.put("＠", "@");
            map.put("〈", "<");
            map.put("〉", ">");
            map.put("✶", "*");
            map.put("̸", "/");
            map.put("［", "[");
            map.put("＼", "/");
            map.put("］", "]");
            map.put("＾", "^");
            map.put("̿", "=");
            map.put("｛", "{");
            map.put("｜", "|");
            map.put("｝", "}");
            map.put("～", "~");
            map.put("⭠", "←");
            map.put("､", ",");
            map.put("̲|", "_");
            map.put("㎏", "kg");
            map.put("⎜", "|");
            map.put("㎝", "cm");
            map.put("〉", ">");
            map.put(UrlEntity.FILE_START, "[");
            map.put(UrlEntity.FILE_END, "]");
            map.put("‖", "‖");
            map.put("″", "\"");
            map.put("⑵", "②");
            map.put("⑶", "③");
            map.put("¥", "¥");
            map.put("℅", "℅");
            map.put("║", "|");
            map.put("ǽ", "æ");
            map.put("∣", "∣");
            map.put("ا", "ا");
            map.put("∶", "∶");
            map.put("∼", "∼");
            map.put("∽", "∽");
            map.put("﹑", ",");
            map.put("∧", "∧");
            map.put("∏", "∏");
            map.put("∑", "∑");

            map.put("⟨", "<");
            map.put("⟩", ">");

            map.put("　", " ");
            map.put("‹", "<");
        }
        return map;
    }


    public static String reEnd(String result) {
        if (result.endsWith(",")) {
            result = result.substring(0, result.length() - ",".length()).trim();
        }
        if (result.endsWith(".")) {
            result = result.substring(0, result.length() - ".".length()).trim();
        }
        if (result.endsWith(",")) {
            result = result.substring(0, result.length() - ",".length()).trim();
        }
        if (result.endsWith(".")) {
            result = result.substring(0, result.length() - ".".length()).trim();
        }
        return result.trim();
    }

    // 匹配p站删除文件名特殊字符
    public static String delPPointStr(String str) {
        if (StringUtils.isEmpty(str)) {
            return str;
        }
        if (str.trim().endsWith(".")) {
            str = str.substring(0, str.length() - 1).trim();
            if (str.endsWith(".")) {
                str = delPPointStr(str);
            }
        }

        // windows 文件夹特殊字符
        // \ / : * ? " < > |

        if (str.contains("/")) {
            str = str.replace("/", "斜杠号");
        }
        if (str.contains("/")) {
            str = str.replace("/", "反斜杠号");
        }
        if (str.contains(":")) {
            str = str.replace(":", "冒号");
        }
        if (str.contains("*")) {
            str = str.replace("*", "星号");
        }
        if (str.contains("?")) {
            str = str.replace("?", "问号");
        }
        if (str.contains("\"")) {
            str = str.replace("\"", "引号");
        }
        if (str.contains("<")) {
            str = str.replace("<", "小于号");
        }
        if (str.contains(">")) {
            str = str.replace(">", "大于号");
        }
        if (str.contains("|")) {
            str = str.replace("|", "竖号");
        }
//        if (str.contains("!")) {
//            str = str.replace("!", "叹号");
//        }
        return str;
    }


    public static String getDomain(String request) {
        String remoteHost = request;
        URL url = null;
        String domain = "";
        try {
            url = new URL(remoteHost);
        } catch (MalformedURLException e) {
            e.printStackTrace();
        }
        String host = url.getHost();
        remoteHost = host;
        String S = remoteHost;
        String[] split = S.split("/.");
        StringBuffer stringBuffer = new StringBuffer();
        if (split.length > 2) {
            for (int i = 0; i < split.length; i++) {
                if (i != 0) {
                    stringBuffer.append(split[i] + ".");
                }
            }
        }
        if (StrUtils.isNotNull(stringBuffer.toString())) {
            domain = stringBuffer.toString().replace("/.", "");
            if (domain.endsWith(".")) {
                domain = domain.substring(0, domain.length() - 1);
            }
        } else {
            return S;
        }

        return domain;
    }


    //去除乱子符 除了字母数字汉字日语外的所有恶心字符
    // /u0800-/u4e00 (日文)
    // /u4e00-/u9fa5 (中文)
    public static String DelOther(String str) {
        return str.replaceAll("[^a-zA-Z0-9\\u0800-\\u4e00\\u4e00-\\u9fa5]", "").toLowerCase();
    }


    public static boolean isNotNull(Object ss) {
        if (ss == null || ss.toString().equals("")) {
            return false;
        } else {
            return true;
        }
    }

    public static boolean ObjectIsNull(Object o) {
        if (o == null || o.toString().equals("") || o.toString().equals("null")) {
            return true;
        } else {
            return false;
        }
    }


    public static void main(String[] args) {

        String as = "wdwq2342!@#!#@$#.adq3dqdasd% $#^$.>>asdq2..a.dsasd &*()( )_&*^七沢みあ%&%%dasdad3d3aad 观测阿达阿萨德3243群我23 asded";
        String s = DelOther(as);
        System.out.println(as);
        System.out.println(s);
    }
}
